package controller;

import helper.AbstractAction;
import helper.ParseUtil;

import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.List;

import view.BankView;
import view.KontobewegungenDialog;
import bank.Konto;
import bank.Kontobewegung;
import bank.Kunde;


public class KontobewegungenDialogController {

    private final BankHandler bankHandler;
    private final BankView bankView;

    private KontobewegungenDialog dialog;


    public KontobewegungenDialogController(BankHandler aBankHandler, BankView aBankView) {
        bankHandler = aBankHandler;
        bankView = aBankView;
    }

    public void start() {
        dialog = new KontobewegungenDialog(bankView, true);
        initActions();
    }

    public void start(int aKundennummer) {
        dialog = new KontobewegungenDialog(bankView, true, aKundennummer);
        initActions();
        dialog.getBtZeigeKontobewegungen().doClick();
    }

    private void initActions() {
        dialog.getBtZeigeKontobewegungen().addActionListener(new KontobewegungenAnzeigenAction());
        dialog.getBtEnde().addActionListener(new BeendenAction());
        dialog.getKontenTable().addMouseListener(new KontoSelectionChangeHandler());
    }


    // Inner Classes ***********************************************************

    private class KontobewegungenAnzeigenAction extends AbstractAction {
        @Override
        protected void execute(ActionEvent aEvent) throws Exception {
            int kundennummer = ParseUtil.parseKundennummer(dialog.getTfKundennummer().getText());
            Kunde kunde = bankHandler.getKundeByKundenNummer(kundennummer);
            dialog.getKontoUebersichtTableModel().setKonten(kunde.getKontenListe());
        }
    }

    private class BeendenAction extends AbstractAction {
        @Override
        protected void execute(ActionEvent aEvent) throws Exception {
            dialog.dispose();
        }
    }

    private class KontoSelectionChangeHandler implements MouseListener {
        @Override
        public void mouseClicked(MouseEvent e) {
            List<Kontobewegung> kontobewegungen = null;
            int selectedRow = dialog.getKontenTable().getSelectedRow();
            if (selectedRow >= 0) {
                Konto konto = dialog.getKontoUebersichtTableModel().getKonten().get(selectedRow);
                kontobewegungen = konto.getMeineKontobewegungen();
            }
            dialog.getKontobewegungenTableModel().setKontobewegungen(kontobewegungen);
        }

        @Override
        public void mousePressed(MouseEvent e) {
        }

        @Override
        public void mouseReleased(MouseEvent e) {
        }

        @Override
        public void mouseEntered(MouseEvent e) {
        }

        @Override
        public void mouseExited(MouseEvent e) {
        }
    }
}
